/*
Original Work Copyright (c) 2018 Xiao Wang (wangxiao@gmail.com)
Modified Work Copyright (c) 2020 Microsoft Research

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Enquiries about further applications and development opportunities are welcome.

Modified by Deevashwer Rathee
*/

#ifndef CONFIG_H__
#define CONFIG_H__
#include <map>

namespace primihub::sci {
const static int AES_BATCH_SIZE = 2048;
// const static int AES_BATCH_SIZE = 256;
const static int HASH_BUFFER_SIZE = 1024 * 8;
const static int NETWORK_BUFFER_SIZE =
    1024 * 16; // Should change depending on the network
const static int FILE_BUFFER_SIZE = 1024 * 16;
const static int CHECK_BUFFER_SIZE = 1024 * 8;

const static int XOR = -1;
const static int PUBLIC = 0;
const static int ALICE = 1;
const static int BOB = 2;

#ifdef SCI_HE
const std::map<int32_t, uint64_t> default_prime_mod{
    {32, 4293918721},    {33, 8585084929},   {34, 17171218433},
    {35, 34359214081},   {36, 68686184449},  {37, 137352314881},
    {38, 274824036353},  {39, 549753716737}, {40, 1099480956929},
    {41, 2198100901889},
};
#endif

const static uint64_t WH_Code[256][4] = {
    {0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
     0x0000000000000000},
    {0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa,
     0xaaaaaaaaaaaaaaaa},
    {0xcccccccccccccccc, 0xcccccccccccccccc, 0xcccccccccccccccc,
     0xcccccccccccccccc},
    {0x6666666666666666, 0x6666666666666666, 0x6666666666666666,
     0x6666666666666666},
    {0xf0f0f0f0f0f0f0f0, 0xf0f0f0f0f0f0f0f0, 0xf0f0f0f0f0f0f0f0,
     0xf0f0f0f0f0f0f0f0},
    {0x5a5a5a5a5a5a5a5a, 0x5a5a5a5a5a5a5a5a, 0x5a5a5a5a5a5a5a5a,
     0x5a5a5a5a5a5a5a5a},
    {0x3c3c3c3c3c3c3c3c, 0x3c3c3c3c3c3c3c3c, 0x3c3c3c3c3c3c3c3c,
     0x3c3c3c3c3c3c3c3c},
    {0x9696969696969696, 0x9696969696969696, 0x9696969696969696,
     0x9696969696969696},
    {0xff00ff00ff00ff00, 0xff00ff00ff00ff00, 0xff00ff00ff00ff00,
     0xff00ff00ff00ff00},
    {0x55aa55aa55aa55aa, 0x55aa55aa55aa55aa, 0x55aa55aa55aa55aa,
     0x55aa55aa55aa55aa},
    {0x33cc33cc33cc33cc, 0x33cc33cc33cc33cc, 0x33cc33cc33cc33cc,
     0x33cc33cc33cc33cc},
    {0x9966996699669966, 0x9966996699669966, 0x9966996699669966,
     0x9966996699669966},
    {0x0ff00ff00ff00ff0, 0x0ff00ff00ff00ff0, 0x0ff00ff00ff00ff0,
     0x0ff00ff00ff00ff0},
    {0xa55aa55aa55aa55a, 0xa55aa55aa55aa55a, 0xa55aa55aa55aa55a,
     0xa55aa55aa55aa55a},
    {0xc33cc33cc33cc33c, 0xc33cc33cc33cc33c, 0xc33cc33cc33cc33c,
     0xc33cc33cc33cc33c},
    {0x6996699669966996, 0x6996699669966996, 0x6996699669966996,
     0x6996699669966996},
    {0xffff0000ffff0000, 0xffff0000ffff0000, 0xffff0000ffff0000,
     0xffff0000ffff0000},
    {0x5555aaaa5555aaaa, 0x5555aaaa5555aaaa, 0x5555aaaa5555aaaa,
     0x5555aaaa5555aaaa},
    {0x3333cccc3333cccc, 0x3333cccc3333cccc, 0x3333cccc3333cccc,
     0x3333cccc3333cccc},
    {0x9999666699996666, 0x9999666699996666, 0x9999666699996666,
     0x9999666699996666},
    {0x0f0ff0f00f0ff0f0, 0x0f0ff0f00f0ff0f0, 0x0f0ff0f00f0ff0f0,
     0x0f0ff0f00f0ff0f0},
    {0xa5a55a5aa5a55a5a, 0xa5a55a5aa5a55a5a, 0xa5a55a5aa5a55a5a,
     0xa5a55a5aa5a55a5a},
    {0xc3c33c3cc3c33c3c, 0xc3c33c3cc3c33c3c, 0xc3c33c3cc3c33c3c,
     0xc3c33c3cc3c33c3c},
    {0x6969969669699696, 0x6969969669699696, 0x6969969669699696,
     0x6969969669699696},
    {0x00ffff0000ffff00, 0x00ffff0000ffff00, 0x00ffff0000ffff00,
     0x00ffff0000ffff00},
    {0xaa5555aaaa5555aa, 0xaa5555aaaa5555aa, 0xaa5555aaaa5555aa,
     0xaa5555aaaa5555aa},
    {0xcc3333cccc3333cc, 0xcc3333cccc3333cc, 0xcc3333cccc3333cc,
     0xcc3333cccc3333cc},
    {0x6699996666999966, 0x6699996666999966, 0x6699996666999966,
     0x6699996666999966},
    {0xf00f0ff0f00f0ff0, 0xf00f0ff0f00f0ff0, 0xf00f0ff0f00f0ff0,
     0xf00f0ff0f00f0ff0},
    {0x5aa5a55a5aa5a55a, 0x5aa5a55a5aa5a55a, 0x5aa5a55a5aa5a55a,
     0x5aa5a55a5aa5a55a},
    {0x3cc3c33c3cc3c33c, 0x3cc3c33c3cc3c33c, 0x3cc3c33c3cc3c33c,
     0x3cc3c33c3cc3c33c},
    {0x9669699696696996, 0x9669699696696996, 0x9669699696696996,
     0x9669699696696996},
    {0xffffffff00000000, 0xffffffff00000000, 0xffffffff00000000,
     0xffffffff00000000},
    {0x55555555aaaaaaaa, 0x55555555aaaaaaaa, 0x55555555aaaaaaaa,
     0x55555555aaaaaaaa},
    {0x33333333cccccccc, 0x33333333cccccccc, 0x33333333cccccccc,
     0x33333333cccccccc},
    {0x9999999966666666, 0x9999999966666666, 0x9999999966666666,
     0x9999999966666666},
    {0x0f0f0f0ff0f0f0f0, 0x0f0f0f0ff0f0f0f0, 0x0f0f0f0ff0f0f0f0,
     0x0f0f0f0ff0f0f0f0},
    {0xa5a5a5a55a5a5a5a, 0xa5a5a5a55a5a5a5a, 0xa5a5a5a55a5a5a5a,
     0xa5a5a5a55a5a5a5a},
    {0xc3c3c3c33c3c3c3c, 0xc3c3c3c33c3c3c3c, 0xc3c3c3c33c3c3c3c,
     0xc3c3c3c33c3c3c3c},
    {0x6969696996969696, 0x6969696996969696, 0x6969696996969696,
     0x6969696996969696},
    {0x00ff00ffff00ff00, 0x00ff00ffff00ff00, 0x00ff00ffff00ff00,
     0x00ff00ffff00ff00},
    {0xaa55aa5555aa55aa, 0xaa55aa5555aa55aa, 0xaa55aa5555aa55aa,
     0xaa55aa5555aa55aa},
    {0xcc33cc3333cc33cc, 0xcc33cc3333cc33cc, 0xcc33cc3333cc33cc,
     0xcc33cc3333cc33cc},
    {0x6699669999669966, 0x6699669999669966, 0x6699669999669966,
     0x6699669999669966},
    {0xf00ff00f0ff00ff0, 0xf00ff00f0ff00ff0, 0xf00ff00f0ff00ff0,
     0xf00ff00f0ff00ff0},
    {0x5aa55aa5a55aa55a, 0x5aa55aa5a55aa55a, 0x5aa55aa5a55aa55a,
     0x5aa55aa5a55aa55a},
    {0x3cc33cc3c33cc33c, 0x3cc33cc3c33cc33c, 0x3cc33cc3c33cc33c,
     0x3cc33cc3c33cc33c},
    {0x9669966969966996, 0x9669966969966996, 0x9669966969966996,
     0x9669966969966996},
    {0x0000ffffffff0000, 0x0000ffffffff0000, 0x0000ffffffff0000,
     0x0000ffffffff0000},
    {0xaaaa55555555aaaa, 0xaaaa55555555aaaa, 0xaaaa55555555aaaa,
     0xaaaa55555555aaaa},
    {0xcccc33333333cccc, 0xcccc33333333cccc, 0xcccc33333333cccc,
     0xcccc33333333cccc},
    {0x6666999999996666, 0x6666999999996666, 0x6666999999996666,
     0x6666999999996666},
    {0xf0f00f0f0f0ff0f0, 0xf0f00f0f0f0ff0f0, 0xf0f00f0f0f0ff0f0,
     0xf0f00f0f0f0ff0f0},
    {0x5a5aa5a5a5a55a5a, 0x5a5aa5a5a5a55a5a, 0x5a5aa5a5a5a55a5a,
     0x5a5aa5a5a5a55a5a},
    {0x3c3cc3c3c3c33c3c, 0x3c3cc3c3c3c33c3c, 0x3c3cc3c3c3c33c3c,
     0x3c3cc3c3c3c33c3c},
    {0x9696696969699696, 0x9696696969699696, 0x9696696969699696,
     0x9696696969699696},
    {0xff0000ff00ffff00, 0xff0000ff00ffff00, 0xff0000ff00ffff00,
     0xff0000ff00ffff00},
    {0x55aaaa55aa5555aa, 0x55aaaa55aa5555aa, 0x55aaaa55aa5555aa,
     0x55aaaa55aa5555aa},
    {0x33cccc33cc3333cc, 0x33cccc33cc3333cc, 0x33cccc33cc3333cc,
     0x33cccc33cc3333cc},
    {0x9966669966999966, 0x9966669966999966, 0x9966669966999966,
     0x9966669966999966},
    {0x0ff0f00ff00f0ff0, 0x0ff0f00ff00f0ff0, 0x0ff0f00ff00f0ff0,
     0x0ff0f00ff00f0ff0},
    {0xa55a5aa55aa5a55a, 0xa55a5aa55aa5a55a, 0xa55a5aa55aa5a55a,
     0xa55a5aa55aa5a55a},
    {0xc33c3cc33cc3c33c, 0xc33c3cc33cc3c33c, 0xc33c3cc33cc3c33c,
     0xc33c3cc33cc3c33c},
    {0x6996966996696996, 0x6996966996696996, 0x6996966996696996,
     0x6996966996696996},
    {0xffffffffffffffff, 0x0000000000000000, 0xffffffffffffffff,
     0x0000000000000000},
    {0x5555555555555555, 0xaaaaaaaaaaaaaaaa, 0x5555555555555555,
     0xaaaaaaaaaaaaaaaa},
    {0x3333333333333333, 0xcccccccccccccccc, 0x3333333333333333,
     0xcccccccccccccccc},
    {0x9999999999999999, 0x6666666666666666, 0x9999999999999999,
     0x6666666666666666},
    {0x0f0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f0, 0x0f0f0f0f0f0f0f0f,
     0xf0f0f0f0f0f0f0f0},
    {0xa5a5a5a5a5a5a5a5, 0x5a5a5a5a5a5a5a5a, 0xa5a5a5a5a5a5a5a5,
     0x5a5a5a5a5a5a5a5a},
    {0xc3c3c3c3c3c3c3c3, 0x3c3c3c3c3c3c3c3c, 0xc3c3c3c3c3c3c3c3,
     0x3c3c3c3c3c3c3c3c},
    {0x6969696969696969, 0x9696969696969696, 0x6969696969696969,
     0x9696969696969696},
    {0x00ff00ff00ff00ff, 0xff00ff00ff00ff00, 0x00ff00ff00ff00ff,
     0xff00ff00ff00ff00},
    {0xaa55aa55aa55aa55, 0x55aa55aa55aa55aa, 0xaa55aa55aa55aa55,
     0x55aa55aa55aa55aa},
    {0xcc33cc33cc33cc33, 0x33cc33cc33cc33cc, 0xcc33cc33cc33cc33,
     0x33cc33cc33cc33cc},
    {0x6699669966996699, 0x9966996699669966, 0x6699669966996699,
     0x9966996699669966},
    {0xf00ff00ff00ff00f, 0x0ff00ff00ff00ff0, 0xf00ff00ff00ff00f,
     0x0ff00ff00ff00ff0},
    {0x5aa55aa55aa55aa5, 0xa55aa55aa55aa55a, 0x5aa55aa55aa55aa5,
     0xa55aa55aa55aa55a},
    {0x3cc33cc33cc33cc3, 0xc33cc33cc33cc33c, 0x3cc33cc33cc33cc3,
     0xc33cc33cc33cc33c},
    {0x9669966996699669, 0x6996699669966996, 0x9669966996699669,
     0x6996699669966996},
    {0x0000ffff0000ffff, 0xffff0000ffff0000, 0x0000ffff0000ffff,
     0xffff0000ffff0000},
    {0xaaaa5555aaaa5555, 0x5555aaaa5555aaaa, 0xaaaa5555aaaa5555,
     0x5555aaaa5555aaaa},
    {0xcccc3333cccc3333, 0x3333cccc3333cccc, 0xcccc3333cccc3333,
     0x3333cccc3333cccc},
    {0x6666999966669999, 0x9999666699996666, 0x6666999966669999,
     0x9999666699996666},
    {0xf0f00f0ff0f00f0f, 0x0f0ff0f00f0ff0f0, 0xf0f00f0ff0f00f0f,
     0x0f0ff0f00f0ff0f0},
    {0x5a5aa5a55a5aa5a5, 0xa5a55a5aa5a55a5a, 0x5a5aa5a55a5aa5a5,
     0xa5a55a5aa5a55a5a},
    {0x3c3cc3c33c3cc3c3, 0xc3c33c3cc3c33c3c, 0x3c3cc3c33c3cc3c3,
     0xc3c33c3cc3c33c3c},
    {0x9696696996966969, 0x6969969669699696, 0x9696696996966969,
     0x6969969669699696},
    {0xff0000ffff0000ff, 0x00ffff0000ffff00, 0xff0000ffff0000ff,
     0x00ffff0000ffff00},
    {0x55aaaa5555aaaa55, 0xaa5555aaaa5555aa, 0x55aaaa5555aaaa55,
     0xaa5555aaaa5555aa},
    {0x33cccc3333cccc33, 0xcc3333cccc3333cc, 0x33cccc3333cccc33,
     0xcc3333cccc3333cc},
    {0x9966669999666699, 0x6699996666999966, 0x9966669999666699,
     0x6699996666999966},
    {0x0ff0f00f0ff0f00f, 0xf00f0ff0f00f0ff0, 0x0ff0f00f0ff0f00f,
     0xf00f0ff0f00f0ff0},
    {0xa55a5aa5a55a5aa5, 0x5aa5a55a5aa5a55a, 0xa55a5aa5a55a5aa5,
     0x5aa5a55a5aa5a55a},
    {0xc33c3cc3c33c3cc3, 0x3cc3c33c3cc3c33c, 0xc33c3cc3c33c3cc3,
     0x3cc3c33c3cc3c33c},
    {0x6996966969969669, 0x9669699696696996, 0x6996966969969669,
     0x9669699696696996},
    {0x00000000ffffffff, 0xffffffff00000000, 0x00000000ffffffff,
     0xffffffff00000000},
    {0xaaaaaaaa55555555, 0x55555555aaaaaaaa, 0xaaaaaaaa55555555,
     0x55555555aaaaaaaa},
    {0xcccccccc33333333, 0x33333333cccccccc, 0xcccccccc33333333,
     0x33333333cccccccc},
    {0x6666666699999999, 0x9999999966666666, 0x6666666699999999,
     0x9999999966666666},
    {0xf0f0f0f00f0f0f0f, 0x0f0f0f0ff0f0f0f0, 0xf0f0f0f00f0f0f0f,
     0x0f0f0f0ff0f0f0f0},
    {0x5a5a5a5aa5a5a5a5, 0xa5a5a5a55a5a5a5a, 0x5a5a5a5aa5a5a5a5,
     0xa5a5a5a55a5a5a5a},
    {0x3c3c3c3cc3c3c3c3, 0xc3c3c3c33c3c3c3c, 0x3c3c3c3cc3c3c3c3,
     0xc3c3c3c33c3c3c3c},
    {0x9696969669696969, 0x6969696996969696, 0x9696969669696969,
     0x6969696996969696},
    {0xff00ff0000ff00ff, 0x00ff00ffff00ff00, 0xff00ff0000ff00ff,
     0x00ff00ffff00ff00},
    {0x55aa55aaaa55aa55, 0xaa55aa5555aa55aa, 0x55aa55aaaa55aa55,
     0xaa55aa5555aa55aa},
    {0x33cc33cccc33cc33, 0xcc33cc3333cc33cc, 0x33cc33cccc33cc33,
     0xcc33cc3333cc33cc},
    {0x9966996666996699, 0x6699669999669966, 0x9966996666996699,
     0x6699669999669966},
    {0x0ff00ff0f00ff00f, 0xf00ff00f0ff00ff0, 0x0ff00ff0f00ff00f,
     0xf00ff00f0ff00ff0},
    {0xa55aa55a5aa55aa5, 0x5aa55aa5a55aa55a, 0xa55aa55a5aa55aa5,
     0x5aa55aa5a55aa55a},
    {0xc33cc33c3cc33cc3, 0x3cc33cc3c33cc33c, 0xc33cc33c3cc33cc3,
     0x3cc33cc3c33cc33c},
    {0x6996699696699669, 0x9669966969966996, 0x6996699696699669,
     0x9669966969966996},
    {0xffff00000000ffff, 0x0000ffffffff0000, 0xffff00000000ffff,
     0x0000ffffffff0000},
    {0x5555aaaaaaaa5555, 0xaaaa55555555aaaa, 0x5555aaaaaaaa5555,
     0xaaaa55555555aaaa},
    {0x3333cccccccc3333, 0xcccc33333333cccc, 0x3333cccccccc3333,
     0xcccc33333333cccc},
    {0x9999666666669999, 0x6666999999996666, 0x9999666666669999,
     0x6666999999996666},
    {0x0f0ff0f0f0f00f0f, 0xf0f00f0f0f0ff0f0, 0x0f0ff0f0f0f00f0f,
     0xf0f00f0f0f0ff0f0},
    {0xa5a55a5a5a5aa5a5, 0x5a5aa5a5a5a55a5a, 0xa5a55a5a5a5aa5a5,
     0x5a5aa5a5a5a55a5a},
    {0xc3c33c3c3c3cc3c3, 0x3c3cc3c3c3c33c3c, 0xc3c33c3c3c3cc3c3,
     0x3c3cc3c3c3c33c3c},
    {0x6969969696966969, 0x9696696969699696, 0x6969969696966969,
     0x9696696969699696},
    {0x00ffff00ff0000ff, 0xff0000ff00ffff00, 0x00ffff00ff0000ff,
     0xff0000ff00ffff00},
    {0xaa5555aa55aaaa55, 0x55aaaa55aa5555aa, 0xaa5555aa55aaaa55,
     0x55aaaa55aa5555aa},
    {0xcc3333cc33cccc33, 0x33cccc33cc3333cc, 0xcc3333cc33cccc33,
     0x33cccc33cc3333cc},
    {0x6699996699666699, 0x9966669966999966, 0x6699996699666699,
     0x9966669966999966},
    {0xf00f0ff00ff0f00f, 0x0ff0f00ff00f0ff0, 0xf00f0ff00ff0f00f,
     0x0ff0f00ff00f0ff0},
    {0x5aa5a55aa55a5aa5, 0xa55a5aa55aa5a55a, 0x5aa5a55aa55a5aa5,
     0xa55a5aa55aa5a55a},
    {0x3cc3c33cc33c3cc3, 0xc33c3cc33cc3c33c, 0x3cc3c33cc33c3cc3,
     0xc33c3cc33cc3c33c},
    {0x9669699669969669, 0x6996966996696996, 0x9669699669969669,
     0x6996966996696996},
    {0xffffffffffffffff, 0xffffffffffffffff, 0x0000000000000000,
     0x0000000000000000},
    {0x5555555555555555, 0x5555555555555555, 0xaaaaaaaaaaaaaaaa,
     0xaaaaaaaaaaaaaaaa},
    {0x3333333333333333, 0x3333333333333333, 0xcccccccccccccccc,
     0xcccccccccccccccc},
    {0x9999999999999999, 0x9999999999999999, 0x6666666666666666,
     0x6666666666666666},
    {0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f, 0xf0f0f0f0f0f0f0f0,
     0xf0f0f0f0f0f0f0f0},
    {0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5, 0x5a5a5a5a5a5a5a5a,
     0x5a5a5a5a5a5a5a5a},
    {0xc3c3c3c3c3c3c3c3, 0xc3c3c3c3c3c3c3c3, 0x3c3c3c3c3c3c3c3c,
     0x3c3c3c3c3c3c3c3c},
    {0x6969696969696969, 0x6969696969696969, 0x9696969696969696,
     0x9696969696969696},
    {0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff, 0xff00ff00ff00ff00,
     0xff00ff00ff00ff00},
    {0xaa55aa55aa55aa55, 0xaa55aa55aa55aa55, 0x55aa55aa55aa55aa,
     0x55aa55aa55aa55aa},
    {0xcc33cc33cc33cc33, 0xcc33cc33cc33cc33, 0x33cc33cc33cc33cc,
     0x33cc33cc33cc33cc},
    {0x6699669966996699, 0x6699669966996699, 0x9966996699669966,
     0x9966996699669966},
    {0xf00ff00ff00ff00f, 0xf00ff00ff00ff00f, 0x0ff00ff00ff00ff0,
     0x0ff00ff00ff00ff0},
    {0x5aa55aa55aa55aa5, 0x5aa55aa55aa55aa5, 0xa55aa55aa55aa55a,
     0xa55aa55aa55aa55a},
    {0x3cc33cc33cc33cc3, 0x3cc33cc33cc33cc3, 0xc33cc33cc33cc33c,
     0xc33cc33cc33cc33c},
    {0x9669966996699669, 0x9669966996699669, 0x6996699669966996,
     0x6996699669966996},
    {0x0000ffff0000ffff, 0x0000ffff0000ffff, 0xffff0000ffff0000,
     0xffff0000ffff0000},
    {0xaaaa5555aaaa5555, 0xaaaa5555aaaa5555, 0x5555aaaa5555aaaa,
     0x5555aaaa5555aaaa},
    {0xcccc3333cccc3333, 0xcccc3333cccc3333, 0x3333cccc3333cccc,
     0x3333cccc3333cccc},
    {0x6666999966669999, 0x6666999966669999, 0x9999666699996666,
     0x9999666699996666},
    {0xf0f00f0ff0f00f0f, 0xf0f00f0ff0f00f0f, 0x0f0ff0f00f0ff0f0,
     0x0f0ff0f00f0ff0f0},
    {0x5a5aa5a55a5aa5a5, 0x5a5aa5a55a5aa5a5, 0xa5a55a5aa5a55a5a,
     0xa5a55a5aa5a55a5a},
    {0x3c3cc3c33c3cc3c3, 0x3c3cc3c33c3cc3c3, 0xc3c33c3cc3c33c3c,
     0xc3c33c3cc3c33c3c},
    {0x9696696996966969, 0x9696696996966969, 0x6969969669699696,
     0x6969969669699696},
    {0xff0000ffff0000ff, 0xff0000ffff0000ff, 0x00ffff0000ffff00,
     0x00ffff0000ffff00},
    {0x55aaaa5555aaaa55, 0x55aaaa5555aaaa55, 0xaa5555aaaa5555aa,
     0xaa5555aaaa5555aa},
    {0x33cccc3333cccc33, 0x33cccc3333cccc33, 0xcc3333cccc3333cc,
     0xcc3333cccc3333cc},
    {0x9966669999666699, 0x9966669999666699, 0x6699996666999966,
     0x6699996666999966},
    {0x0ff0f00f0ff0f00f, 0x0ff0f00f0ff0f00f, 0xf00f0ff0f00f0ff0,
     0xf00f0ff0f00f0ff0},
    {0xa55a5aa5a55a5aa5, 0xa55a5aa5a55a5aa5, 0x5aa5a55a5aa5a55a,
     0x5aa5a55a5aa5a55a},
    {0xc33c3cc3c33c3cc3, 0xc33c3cc3c33c3cc3, 0x3cc3c33c3cc3c33c,
     0x3cc3c33c3cc3c33c},
    {0x6996966969969669, 0x6996966969969669, 0x9669699696696996,
     0x9669699696696996},
    {0x00000000ffffffff, 0x00000000ffffffff, 0xffffffff00000000,
     0xffffffff00000000},
    {0xaaaaaaaa55555555, 0xaaaaaaaa55555555, 0x55555555aaaaaaaa,
     0x55555555aaaaaaaa},
    {0xcccccccc33333333, 0xcccccccc33333333, 0x33333333cccccccc,
     0x33333333cccccccc},
    {0x6666666699999999, 0x6666666699999999, 0x9999999966666666,
     0x9999999966666666},
    {0xf0f0f0f00f0f0f0f, 0xf0f0f0f00f0f0f0f, 0x0f0f0f0ff0f0f0f0,
     0x0f0f0f0ff0f0f0f0},
    {0x5a5a5a5aa5a5a5a5, 0x5a5a5a5aa5a5a5a5, 0xa5a5a5a55a5a5a5a,
     0xa5a5a5a55a5a5a5a},
    {0x3c3c3c3cc3c3c3c3, 0x3c3c3c3cc3c3c3c3, 0xc3c3c3c33c3c3c3c,
     0xc3c3c3c33c3c3c3c},
    {0x9696969669696969, 0x9696969669696969, 0x6969696996969696,
     0x6969696996969696},
    {0xff00ff0000ff00ff, 0xff00ff0000ff00ff, 0x00ff00ffff00ff00,
     0x00ff00ffff00ff00},
    {0x55aa55aaaa55aa55, 0x55aa55aaaa55aa55, 0xaa55aa5555aa55aa,
     0xaa55aa5555aa55aa},
    {0x33cc33cccc33cc33, 0x33cc33cccc33cc33, 0xcc33cc3333cc33cc,
     0xcc33cc3333cc33cc},
    {0x9966996666996699, 0x9966996666996699, 0x6699669999669966,
     0x6699669999669966},
    {0x0ff00ff0f00ff00f, 0x0ff00ff0f00ff00f, 0xf00ff00f0ff00ff0,
     0xf00ff00f0ff00ff0},
    {0xa55aa55a5aa55aa5, 0xa55aa55a5aa55aa5, 0x5aa55aa5a55aa55a,
     0x5aa55aa5a55aa55a},
    {0xc33cc33c3cc33cc3, 0xc33cc33c3cc33cc3, 0x3cc33cc3c33cc33c,
     0x3cc33cc3c33cc33c},
    {0x6996699696699669, 0x6996699696699669, 0x9669966969966996,
     0x9669966969966996},
    {0xffff00000000ffff, 0xffff00000000ffff, 0x0000ffffffff0000,
     0x0000ffffffff0000},
    {0x5555aaaaaaaa5555, 0x5555aaaaaaaa5555, 0xaaaa55555555aaaa,
     0xaaaa55555555aaaa},
    {0x3333cccccccc3333, 0x3333cccccccc3333, 0xcccc33333333cccc,
     0xcccc33333333cccc},
    {0x9999666666669999, 0x9999666666669999, 0x6666999999996666,
     0x6666999999996666},
    {0x0f0ff0f0f0f00f0f, 0x0f0ff0f0f0f00f0f, 0xf0f00f0f0f0ff0f0,
     0xf0f00f0f0f0ff0f0},
    {0xa5a55a5a5a5aa5a5, 0xa5a55a5a5a5aa5a5, 0x5a5aa5a5a5a55a5a,
     0x5a5aa5a5a5a55a5a},
    {0xc3c33c3c3c3cc3c3, 0xc3c33c3c3c3cc3c3, 0x3c3cc3c3c3c33c3c,
     0x3c3cc3c3c3c33c3c},
    {0x6969969696966969, 0x6969969696966969, 0x9696696969699696,
     0x9696696969699696},
    {0x00ffff00ff0000ff, 0x00ffff00ff0000ff, 0xff0000ff00ffff00,
     0xff0000ff00ffff00},
    {0xaa5555aa55aaaa55, 0xaa5555aa55aaaa55, 0x55aaaa55aa5555aa,
     0x55aaaa55aa5555aa},
    {0xcc3333cc33cccc33, 0xcc3333cc33cccc33, 0x33cccc33cc3333cc,
     0x33cccc33cc3333cc},
    {0x6699996699666699, 0x6699996699666699, 0x9966669966999966,
     0x9966669966999966},
    {0xf00f0ff00ff0f00f, 0xf00f0ff00ff0f00f, 0x0ff0f00ff00f0ff0,
     0x0ff0f00ff00f0ff0},
    {0x5aa5a55aa55a5aa5, 0x5aa5a55aa55a5aa5, 0xa55a5aa55aa5a55a,
     0xa55a5aa55aa5a55a},
    {0x3cc3c33cc33c3cc3, 0x3cc3c33cc33c3cc3, 0xc33c3cc33cc3c33c,
     0xc33c3cc33cc3c33c},
    {0x9669699669969669, 0x9669699669969669, 0x6996966996696996,
     0x6996966996696996},
    {0x0000000000000000, 0xffffffffffffffff, 0xffffffffffffffff,
     0x0000000000000000},
    {0xaaaaaaaaaaaaaaaa, 0x5555555555555555, 0x5555555555555555,
     0xaaaaaaaaaaaaaaaa},
    {0xcccccccccccccccc, 0x3333333333333333, 0x3333333333333333,
     0xcccccccccccccccc},
    {0x6666666666666666, 0x9999999999999999, 0x9999999999999999,
     0x6666666666666666},
    {0xf0f0f0f0f0f0f0f0, 0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f,
     0xf0f0f0f0f0f0f0f0},
    {0x5a5a5a5a5a5a5a5a, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5,
     0x5a5a5a5a5a5a5a5a},
    {0x3c3c3c3c3c3c3c3c, 0xc3c3c3c3c3c3c3c3, 0xc3c3c3c3c3c3c3c3,
     0x3c3c3c3c3c3c3c3c},
    {0x9696969696969696, 0x6969696969696969, 0x6969696969696969,
     0x9696969696969696},
    {0xff00ff00ff00ff00, 0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff,
     0xff00ff00ff00ff00},
    {0x55aa55aa55aa55aa, 0xaa55aa55aa55aa55, 0xaa55aa55aa55aa55,
     0x55aa55aa55aa55aa},
    {0x33cc33cc33cc33cc, 0xcc33cc33cc33cc33, 0xcc33cc33cc33cc33,
     0x33cc33cc33cc33cc},
    {0x9966996699669966, 0x6699669966996699, 0x6699669966996699,
     0x9966996699669966},
    {0x0ff00ff00ff00ff0, 0xf00ff00ff00ff00f, 0xf00ff00ff00ff00f,
     0x0ff00ff00ff00ff0},
    {0xa55aa55aa55aa55a, 0x5aa55aa55aa55aa5, 0x5aa55aa55aa55aa5,
     0xa55aa55aa55aa55a},
    {0xc33cc33cc33cc33c, 0x3cc33cc33cc33cc3, 0x3cc33cc33cc33cc3,
     0xc33cc33cc33cc33c},
    {0x6996699669966996, 0x9669966996699669, 0x9669966996699669,
     0x6996699669966996},
    {0xffff0000ffff0000, 0x0000ffff0000ffff, 0x0000ffff0000ffff,
     0xffff0000ffff0000},
    {0x5555aaaa5555aaaa, 0xaaaa5555aaaa5555, 0xaaaa5555aaaa5555,
     0x5555aaaa5555aaaa},
    {0x3333cccc3333cccc, 0xcccc3333cccc3333, 0xcccc3333cccc3333,
     0x3333cccc3333cccc},
    {0x9999666699996666, 0x6666999966669999, 0x6666999966669999,
     0x9999666699996666},
    {0x0f0ff0f00f0ff0f0, 0xf0f00f0ff0f00f0f, 0xf0f00f0ff0f00f0f,
     0x0f0ff0f00f0ff0f0},
    {0xa5a55a5aa5a55a5a, 0x5a5aa5a55a5aa5a5, 0x5a5aa5a55a5aa5a5,
     0xa5a55a5aa5a55a5a},
    {0xc3c33c3cc3c33c3c, 0x3c3cc3c33c3cc3c3, 0x3c3cc3c33c3cc3c3,
     0xc3c33c3cc3c33c3c},
    {0x6969969669699696, 0x9696696996966969, 0x9696696996966969,
     0x6969969669699696},
    {0x00ffff0000ffff00, 0xff0000ffff0000ff, 0xff0000ffff0000ff,
     0x00ffff0000ffff00},
    {0xaa5555aaaa5555aa, 0x55aaaa5555aaaa55, 0x55aaaa5555aaaa55,
     0xaa5555aaaa5555aa},
    {0xcc3333cccc3333cc, 0x33cccc3333cccc33, 0x33cccc3333cccc33,
     0xcc3333cccc3333cc},
    {0x6699996666999966, 0x9966669999666699, 0x9966669999666699,
     0x6699996666999966},
    {0xf00f0ff0f00f0ff0, 0x0ff0f00f0ff0f00f, 0x0ff0f00f0ff0f00f,
     0xf00f0ff0f00f0ff0},
    {0x5aa5a55a5aa5a55a, 0xa55a5aa5a55a5aa5, 0xa55a5aa5a55a5aa5,
     0x5aa5a55a5aa5a55a},
    {0x3cc3c33c3cc3c33c, 0xc33c3cc3c33c3cc3, 0xc33c3cc3c33c3cc3,
     0x3cc3c33c3cc3c33c},
    {0x9669699696696996, 0x6996966969969669, 0x6996966969969669,
     0x9669699696696996},
    {0xffffffff00000000, 0x00000000ffffffff, 0x00000000ffffffff,
     0xffffffff00000000},
    {0x55555555aaaaaaaa, 0xaaaaaaaa55555555, 0xaaaaaaaa55555555,
     0x55555555aaaaaaaa},
    {0x33333333cccccccc, 0xcccccccc33333333, 0xcccccccc33333333,
     0x33333333cccccccc},
    {0x9999999966666666, 0x6666666699999999, 0x6666666699999999,
     0x9999999966666666},
    {0x0f0f0f0ff0f0f0f0, 0xf0f0f0f00f0f0f0f, 0xf0f0f0f00f0f0f0f,
     0x0f0f0f0ff0f0f0f0},
    {0xa5a5a5a55a5a5a5a, 0x5a5a5a5aa5a5a5a5, 0x5a5a5a5aa5a5a5a5,
     0xa5a5a5a55a5a5a5a},
    {0xc3c3c3c33c3c3c3c, 0x3c3c3c3cc3c3c3c3, 0x3c3c3c3cc3c3c3c3,
     0xc3c3c3c33c3c3c3c},
    {0x6969696996969696, 0x9696969669696969, 0x9696969669696969,
     0x6969696996969696},
    {0x00ff00ffff00ff00, 0xff00ff0000ff00ff, 0xff00ff0000ff00ff,
     0x00ff00ffff00ff00},
    {0xaa55aa5555aa55aa, 0x55aa55aaaa55aa55, 0x55aa55aaaa55aa55,
     0xaa55aa5555aa55aa},
    {0xcc33cc3333cc33cc, 0x33cc33cccc33cc33, 0x33cc33cccc33cc33,
     0xcc33cc3333cc33cc},
    {0x6699669999669966, 0x9966996666996699, 0x9966996666996699,
     0x6699669999669966},
    {0xf00ff00f0ff00ff0, 0x0ff00ff0f00ff00f, 0x0ff00ff0f00ff00f,
     0xf00ff00f0ff00ff0},
    {0x5aa55aa5a55aa55a, 0xa55aa55a5aa55aa5, 0xa55aa55a5aa55aa5,
     0x5aa55aa5a55aa55a},
    {0x3cc33cc3c33cc33c, 0xc33cc33c3cc33cc3, 0xc33cc33c3cc33cc3,
     0x3cc33cc3c33cc33c},
    {0x9669966969966996, 0x6996699696699669, 0x6996699696699669,
     0x9669966969966996},
    {0x0000ffffffff0000, 0xffff00000000ffff, 0xffff00000000ffff,
     0x0000ffffffff0000},
    {0xaaaa55555555aaaa, 0x5555aaaaaaaa5555, 0x5555aaaaaaaa5555,
     0xaaaa55555555aaaa},
    {0xcccc33333333cccc, 0x3333cccccccc3333, 0x3333cccccccc3333,
     0xcccc33333333cccc},
    {0x6666999999996666, 0x9999666666669999, 0x9999666666669999,
     0x6666999999996666},
    {0xf0f00f0f0f0ff0f0, 0x0f0ff0f0f0f00f0f, 0x0f0ff0f0f0f00f0f,
     0xf0f00f0f0f0ff0f0},
    {0x5a5aa5a5a5a55a5a, 0xa5a55a5a5a5aa5a5, 0xa5a55a5a5a5aa5a5,
     0x5a5aa5a5a5a55a5a},
    {0x3c3cc3c3c3c33c3c, 0xc3c33c3c3c3cc3c3, 0xc3c33c3c3c3cc3c3,
     0x3c3cc3c3c3c33c3c},
    {0x9696696969699696, 0x6969969696966969, 0x6969969696966969,
     0x9696696969699696},
    {0xff0000ff00ffff00, 0x00ffff00ff0000ff, 0x00ffff00ff0000ff,
     0xff0000ff00ffff00},
    {0x55aaaa55aa5555aa, 0xaa5555aa55aaaa55, 0xaa5555aa55aaaa55,
     0x55aaaa55aa5555aa},
    {0x33cccc33cc3333cc, 0xcc3333cc33cccc33, 0xcc3333cc33cccc33,
     0x33cccc33cc3333cc},
    {0x9966669966999966, 0x6699996699666699, 0x6699996699666699,
     0x9966669966999966},
    {0x0ff0f00ff00f0ff0, 0xf00f0ff00ff0f00f, 0xf00f0ff00ff0f00f,
     0x0ff0f00ff00f0ff0},
    {0xa55a5aa55aa5a55a, 0x5aa5a55aa55a5aa5, 0x5aa5a55aa55a5aa5,
     0xa55a5aa55aa5a55a},
    {0xc33c3cc33cc3c33c, 0x3cc3c33cc33c3cc3, 0x3cc3c33cc33c3cc3,
     0xc33c3cc33cc3c33c},
    {0x6996966996696996, 0x9669699669969669, 0x9669699669969669,
     0x6996966996696996}};

#if defined(unix) || defined(__unix__) || defined(__unix) || defined(__APPLE__)
#define UNIX_PLATFORM
#endif
} // namespace primihub::sci
#endif // CONFIG_H__
